package com.bill.common.news.dao;

import com.bill.common.news.dto.CategoryDTO;
import com.bill.common.news.entity.Category;
import com.sinba.common.dao.BaseDAOImplHibernate;
import com.sinba.common.dto.PageDTO;

import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.util.StringUtils;

import java.util.List;

public class CategoryDAO
    extends BaseDAOImplHibernate<Category>
    implements ICategoryDAO
{
    //��ҳ
    public PageDTO findCategoryPager( CategoryDTO dto, String sord, String sidx )
    {
        final DetachedCriteria dc = DetachedCriteria.forClass( Category.class );

        if ( dto != null )
        {
            if ( StringUtils.hasText( dto.getCategoryName(  ) ) )
            {
                dc.add( Restrictions.like( "categoryName",
                                           dto.getCategoryName(  ),
                                           MatchMode.ANYWHERE ) );
            }

            if ( StringUtils.hasText( dto.getCategoryCode(  ) ) )
            {
                dc.add( Restrictions.eq( "categoryCode",
                                         dto.getCategoryCode(  ) ) );
            }

            dc.createAlias( "topic", "tp" );

            if ( StringUtils.hasText( dto.getTopicName(  ) ) )
            {
                dc.add( Restrictions.like( "tp.topicName",
                                           dto.getTopicName(  ),
                                           MatchMode.ANYWHERE ) );
            }

            if ( ( dto.getTopicId(  ) != null ) && ( dto.getTopicId(  ) > 0 ) )
            {
                dc.add( Restrictions.eq( "tp.topicId",
                                         dto.getTopicId(  ) ) );
            }
        }

        //����
        if ( ( sord != null ) && ! sord.equals( "" ) && ( sidx != null ) && ! sidx.equals( "" ) )
        {
            if ( sord.equals( "desc" ) )
            {
                dc.addOrder( Order.desc( sidx ) );
            } else{
                dc.addOrder( Order.asc( sidx ) );
            }
        }

        return super.findPageByCriteria( dc,
                                         dto.getStart(  ),
                                         dto.getLimit(  ) );
    }
    ;
    public List<Category> findCategoryAll( CategoryDTO dto, String sord, String sidx )
    {
        final DetachedCriteria dc = DetachedCriteria.forClass( Category.class );

        if ( dto != null )
        {
            if ( StringUtils.hasText( dto.getCategoryName(  ) ) )
            {
                dc.add( Restrictions.like( "categoryName",
                                           dto.getCategoryName(  ),
                                           MatchMode.ANYWHERE ) );
            }

            if ( StringUtils.hasText( dto.getCategoryCode(  ) ) )
            {
                dc.add( Restrictions.eq( "categoryCode",
                                         dto.getCategoryCode(  ) ) );
            }

            dc.createAlias( "topic", "tp" );

            if ( StringUtils.hasText( dto.getTopicName(  ) ) )
            {
                dc.add( Restrictions.like( "tp.topicName",
                                           dto.getTopicName(  ),
                                           MatchMode.ANYWHERE ) );
            }

            if ( ( dto.getTopicId(  ) != null ) && ( dto.getTopicId(  ) > 0 ) )
            {
                dc.add( Restrictions.eq( "tp.topicId",
                                         dto.getTopicId(  ) ) );
            }
        }

        //����
        if ( ( sord != null ) && ! sord.equals( "" ) && ( sidx != null ) && ! sidx.equals( "" ) )
        {
            if ( sord.equals( "desc" ) )
            {
                dc.addOrder( Order.desc( sidx ) );
            } else{
                dc.addOrder( Order.asc( sidx ) );
            }
        }

        return super.getHibernateTemplate(  ).findByCriteria( dc );
    }
    ;
}
